package com.meitianhui.convenitenbuy.main.http;

import com.meitianhui.convenitenbuy.base.BaseResponse;
import com.meitianhui.convenitenbuy.main.model.bean.AppToken;
import com.meitianhui.convenitenbuy.main.model.bean.CollectedStores;
import com.meitianhui.convenitenbuy.main.model.bean.HyphenateInfo;
import com.meitianhui.convenitenbuy.main.model.bean.PhoneCodeInfo;
import com.meitianhui.convenitenbuy.main.model.bean.StringResponse;
import com.meitianhui.convenitenbuy.main.model.bean.UpdateBean;
import com.meitianhui.convenitenbuy.main.model.bean.UserToken;
import com.meitianhui.convenitenbuy.main.model.bean.VerifyPhone;
import com.meitianhui.convenitenbuy.main.model.bean.VersionInfo;
import com.meitianhui.convenitenbuy.module.mine.model.ConsumerInfo;
import com.meitianhui.convenitenbuy.module.mine.model.UserAsset;
import com.meitianhui.convenitenbuy.module.mine.model.UserInfo;
import com.meitianhui.convenitenbuy.module.order.model.bean.EmptyInfo;
import com.meitianhui.convenitenbuy.module.wallet.model.RedPacketBean;

import okhttp3.ResponseBody;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.Url;
import rx.Observable;

/**
 * MainApi 接口
 */

public interface MainApi {
    /**
     * 获取 appToken
     *
     * @param appId
     * @param privateKey
     * @return
     */
    @POST("app/login")
    Observable<BaseResponse<AppToken>> getAppToken(@Query("app_id") String appId, @Query("private_key") String privateKey);

    /**
     * 判断是否从新连接环信
     *
     * @param userToken
     * @return
     */
    @POST("user/valid_user_token")
    Observable<BaseResponse<UserToken>> isReLoginHypenate(@Query("user_token") String userToken);

    /**
     * 验证会员
     *
     * @param appToken
     * @param typeKey
     * @param phone
     * @return
     */
    @POST("user/valid_type_by_mobile")
    Observable<BaseResponse<VerifyPhone>> verifyPhone(@Query("app_token") String appToken, @Query("member_type_key") String typeKey, @Query("mobile") String phone);

    /**
     * 获取短信验证码的验证信息
     *
     * @param appToken
     * @param server
     * @return
     */
    @POST("infrastructure")
    Observable<StringResponse> getPhoneCodeMsg(@Query("app_token") String appToken, @Query("service") String server);

    /**
     * 获取验证码
     *
     * @param appToken
     * @param phone
     * @param code
     * @return
     */
    @POST("notify/send_sms_code")
    Observable<BaseResponse<EmptyInfo>> getPhoneCode(@Query("app_token") String appToken, @Query("mobile") String phone, @Query("lock_value") String code);

    /**
     * 获取验证码 - 新。
     *
     * @param appToken  App token
     * @param phone     手机号码
     * @param code      Lock value
     * @param imageCode 图片识别码
     */
    @POST("notify/send_sms_code_lyh")
    Observable<BaseResponse<PhoneCodeInfo>> getPhoneCodeNew(@Query("app_token") String appToken, @Query("mobile") String phone, @Query("lock_value") String code, @Query("image_code") String imageCode);

    /**
     * 登录
     *
     * @param appToken
     * @param deviceModel
     * @param phone
     * @param dataSource
     * @param requestInfo
     * @param key
     * @param code
     * @return
     */
    @POST("consumer/login")
    Observable<BaseResponse<UserToken>> login(@Query("app_token") String appToken, @Query("device_model") String deviceModel, @Query("mobile") String phone,
                                              @Query("data_source") String dataSource, @Query("request_info") String requestInfo, @Query("member_type_key") String key, @Query("sms_code") String code);

    /**
     * 获取用户信息
     *
     * @param userToken
     * @return
     */
    @POST("user/info")
    Observable<BaseResponse<UserInfo>> getUserInfo(@Query("user_token") String userToken);

    /**
     * 消费者信息
     *
     * @param userToken
     * @param server
     * @param params
     * @return
     */
    @POST("member")
    Observable<BaseResponse<ConsumerInfo>> getConsumerInfo(@Query("user_token") String userToken, @Query("service") String server, @Query("params") String params);


    /**
     * 获取环信中的信息，如果不存在则会在后台进行注册
     *
     * @param userToken
     * @param server
     * @param params
     * @return
     */
    @POST("community")
    Observable<BaseResponse<HyphenateInfo>> getHyphenateInfo(@Query("user_token") String userToken, @Query("service") String server, @Query("params") String params);

    /**
     * 获取用户资产
     *
     * @param userToken
     * @param server
     * @param params
     * @return
     */
    @POST("finance")
    Observable<BaseResponse<UserAsset>> getUserAsset(@Query("user_token") String userToken, @Query("service") String server, @Query("params") String params);

    /**
     * 获取默认门店
     *
     * @param appToken
     * @param server
     * @param params
     * @return
     */
    @POST("member")
    Observable<BaseResponse<CollectedStores>> getDefaultStores(@Query("app_token") String appToken, @Query("service") String server, @Query("params") String params);

    /**
     * 获取版本信息
     *
     * @param packageName
     * @return
     */
    @POST("version/latest")
    Observable<BaseResponse<VersionInfo>> getVersionInfo(@Query("package_name") String packageName);

    /**
     * 获取 app 升级信息。
     * 更加详细的升级控制，用来替代{@code getVersionInfo()}。
     */
    @POST("member")
    Observable<BaseResponse<UpdateBean>> getUpdateInfo(@Query("app_token") String appToken, @Query("service") String server, @Query("params") String params);

    /**
     * l创建红包
     * @param userToken
     * @param server
     * @param params
     * @return
     */
    @POST("goods")
    Observable<BaseResponse<RedPacketBean>>  getRedPacket(@Query("user_token") String userToken, @Query("service") String server, @Query("params") String params);

    /**
     * 打开红包
     * @param userToken
     * @param server
     * @param params
     * @return
     */
    @POST("goods")
    Observable<BaseResponse>  openRedPacket(@Query("user_token") String userToken, @Query("service") String server, @Query("params") String params);
    /**
     * 上传极光别名等用户信息
     *
     * @param userToken
     * @param userType
     * @param deviceType
     * @param device
     * @param source
     * @param alias
     * @return
     */
    @POST("user/login_log_update?")
    Observable<BaseResponse<EmptyInfo>> postPushInfo(@Query("user_token") String userToken, @Query("member_type_key") String userType, @Query("device_type") String deviceType, @Query("device_model") String device, @Query("data_source") String source, @Query("alias") String alias);

    //下载文件
    @GET
    Observable<ResponseBody> downloadFile(@Url String fileUrl);




}
